Expand description
pprof-rs is an integrated profiler for rust program.
This crate provides a programable interface to start/stop/report a profiler dynamically. With the help of this crate, you can easily integrate a profiler into your rust program in a modern, convenient way.
A sample usage is:
let guard = pprof::ProfilerGuard::new(100).unwrap();
Then you can read report from the guard:
if let Ok(report) = guard.report().build() {
println!("report: {:?}", &report);
};
More configuration can be passed through ProfilerGuardBuilder
:
let guard = pprof::ProfilerGuardBuilder::default().frequency(1000).blocklist(&["libc", "libgcc", "pthread", "vdso"]).build().unwrap();
The frequency means the sampler frequency, and the blocklist
means the
profiler will ignore the sample whose first frame is from library containing
these strings.
Skipping libc
, libgcc
and libpthread
could be a solution to the
possible deadlock inside the _Unwind_Backtrace
, and keep the signal
safety. The dwarf information in “vdso” is incorrect in some distributions,
so it’s also suggested to skip it.
You can find more details in README.md
Modules
- Tools for producing flame graphs from folded stack traces.
Structs
- A representation of a backtrace.
thread_name
andthread_id
was got frompthread_getname_np
andpthread_self
. frames is a vector of symbols. - RAII structure used to stop profiling when dropped. It is the only interface to access profiler.
- The final presentation of a report which is actually an
HashMap
fromFrames
to isize (count). - A builder of
Report
andUnresolvedReport
. It builds report from a runningProfiler
. - Symbol is a representation of a function symbol. It contains name and addr of it. If built with debug message, it can also provide line number and filename. The name in it is not demangled.
- The presentation of an unsymbolicated report which is actually an
HashMap
fromUnresolvedFrames
to isize (count).
Enums
Constants
- Define the MAX supported stack depth. TODO: make this variable mutable.
- Define the MAX supported thread name length. TODO: make this variable mutable.